/*3. 
新建共享内存，连接，然后往共享内存写入How are you,
然后另外一个进程连接共享内存，读取数据并打印显示,最后删除共享内存。
提交操作记录和相关代码。*/
#include <header.h>
int main(int argc, char* argv[]){
	key_t keytag = ftok(".", 1); // 获得key标记
	ERROR_CHECK(keytag, -1, "ftok");
	
	int shmid = shmget(keytag, 4096, 0600|IPC_CREAT);// 产生共享内存
	ERROR_CHECK(shmid, -1, "shmget");

	pid_t pid = fork();
	ERROR_CHECK(pid, -1, "fork");
	char *p = (char*)shmat(shmid, NULL, 0);

	if(pid == 0){
		// child
		
		strcpy(p, "hello!world!\n");
		if(shmdt(p) < 0){
			perror("shmdt");
			exit(-1);
		}

	}else{
		// father
		sleep(3);
		printf(p);

		// 只是解除映射。并没有删除
		if(shmdt(p) < 0){
			perror("shmdt");
			exit(-1);
		}

		int ret1 = shmctl(shmid, IPC_RMID, NULL);
		ERROR_CHECK(ret1, -1, "remove shm");

		pid_t ret2 = wait(NULL);
		ERROR_CHECK(ret2, -1, "wait");
		
	}
	return 0;
}